<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<!--
Design by Free CSS Templates
http://www.freecsstemplates.org
Released for free under a Creative Commons Attribution 2.5 License
-->
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8" />
<title>CSC560 Design and Analysis of Real-Time Systems</title>
<meta name="keywords" content="CSC560" />
<meta name="description" content="CSC560" />
<link href="../default.css" rel="stylesheet" type="text/css" />
</head>
<body>
<div id="wrapper">
	<div id="header">
		<h1>CSC560</h1>
		<h2>Design and Analysis of Real-Time Systems</h2>
		<ul>
			<li class="first"> <a href="../index.html" accesskey="1" title="">Home</a> </li>
			<li> <a href="../project1/index.html" accesskey="2" title="">Project 1</a>	</li>
			<li> <a href="../project2/index.html" accesskey="3" title="">Project 2</a> </li>
			<li> <a href="../project3/index.html" accesskey="4" title="">Project 3</a> </li>
			<li> <a href="../project4/index.html" accesskey="4" title="">Project 4</a> </li>
			<li> <a href="index.html" accesskey="4" title=""><b>Project 5</b></a> </li>
		</ul>
	</div>
</div>
<div id="content">
	<div id="colOne">
		<h2>Develoment Process</h2>
		In implementing this project, we have encountered and resolved various challenges and issues. This section describes our development process, challenges encountered, and the respective solutions applied. If no suitable solutions could be derived, a work-around or assumption is presented instead.
		<br><br>
		In short, the following challenges were encountered:
			<ul>- Schematics and wiring of Cat and Mouse</ul>		
			<ul>- Voltage regulator</ul>		
			<ul>- Cat and Mouse to ‘see’ each other</ul>		
			<ul>- Cat detected and chased the Mouse</ul>		
			<ul>- Roomba’s jerky movement</ul>	
				
			<ul>- IR Beacon transmitters and sensors</ul>		
			<ul>- Guiding Cat to bump the Mouse head-to-head</ul>		
			<ul>- Random search</ul>		
			<ul>- Stuck with a wall</ul>		
			<ul>- Multitasking and scheduling</ul>
					
			<ul>- Radio communication between Cat and Mouse</ul>		
			<ul>- Head shaking</ul>		
			<ul>- Rotating Cat 180 degree instead of moving backwards</ul>		
			<ul>- Autonomous Mouse </ul>		
			<ul>- A fair game</ul>	
				
			<ul>- Slowing down the Mouse</ul>		
		<br><br>
		
		<h3>Schematics and wiring of Cat and Mouse</h3>
		<p>
		The starting point to us was to settle on the schematics of Cat and Mouse because one needed to code accordingly. We’ve all learned from doing projects 1 and 2 the ultimate importance of the wiring. Incorrect wiring of even just one pin would take hours if not days to debug. 		
		<br><br>
		Based on our wiring of projects 1 and 2, we had settled on the schematics and wiring as shown below.
		<br><br>		
		<a href="images/AT90-1.JPG"> <img src="images/AT90-1.JPG" alt="Wiring of Cat/Mouse" width="80%"/> </a>
		<br><br>
		<a href="images/schematics-1.jpg"> <img src="images/schematics-1.jpg" alt="Schematics 1" width="80%"/> </a>		
		<br><br>		
		<a href="images/schematics-2.jpg"> <img src="images/schematics-2.jpg" alt="Schematics 2" width="80%"/> </a>
		<br><br>		
		</p>

		<h3>Voltage regulator</h3>
		<p>
		In terms of supplying power to the IR Transceiver and the AT90 Controller, we used the regulator provided by the TA, Neil Macmillan, to regulate the voltage supplied as the power actually came from the attached Roomba. 
		The IR Beacon Transceiver can operate with a voltage between 6 and 16 volts according to its specification.
		<br><br>
		<a href="images/regulator-1.JPG"><img src="images/regulator-1.JPG" alt="Voltage regulator" width="80%"/></a>	
		<br><br>
		</p>
		
		<h3>Cat and Mouse to ‘see’ each other</h3>
		<p>
		Next thing our system needed was to find a way for the Cat and Mouse to ‘see’ or detect the existence of each other. For that purpose, we used Poloru IR Beacon Transceiver. Initially we wanted to have the Mouse searching for the home charging station while avoiding being caught by the Cat as a Roomba could be instructed with a SCI command to seek for and return to the home charging station. We learned that in fact Roomba had built-in IR sensors to receive IR signals emitted by the home charging station to allow it to return to home. 
		<br><br>		
		In addition, we learned that the Poloru IR Beacon Transceiver used the same IR frequency as the home charging station. Thus, a Roomba cannot distinguish between the home charging station or another Poloru IR Beacon Transceiver. As a result, we decided not to use the home charging station. Rather, we attached an IR Transceiver on each Cat and Mouse. The Mouse simply attempted to run away from the Cat whenever any one of its four IR sensors detected signals emitted from the Cat’s six IR Beacon Transmitters. Conversely, the Cat simply attempted to move towards the Mouse whenever any one of its sensors detected signals emitted from the Mouse’s.		
		<br><br>
		There are four IR beacon sensors on the underside and six transmitters on the topside of the Poloru Transceiver. The four sensors corresponded to the four directions, North, South, East, and West, which were labeled respectively N, S, E, and W on the IR Transceiver. We had the four sensors wired to four separate pins on an AT90 controller board. By polling values of these four pins while having another dummy IR Transceiver attached to anther AT90 controller for experimenting, we learned from experiment that at most one of the four sensor pins was pulled low at any given time. 		
		<br><br>
		In fact, the sensor pin that received the ‘strongest’ IR signal would pull low while the other three remained high. If none of the four sensors received signals, all would remain high. In addition, we found that sensors values were refreshed 20 times per second according to the IR Transceiver’s specification. Armed with this knowledge, we were able to proceed as Cat would not only be able to ‘see’ the Mouse, but also be able to pinpoint Mouse’s direction.	
		<br><br>
		The following image is a snapshot of a Poloru Transceiver.		
		<br><br>
		<a href="images/IRBeacon-0.jpg"><img src="images/IRBeacon-0.jpg" alt="Poloru IR Beacon Transceiver" /> </a>
		<br><br>
		</p>		

		<h3>Cat detected and chased the Mouse</h3>
		<p>
		To test the responsiveness of the IR beacon sensors and to have the Cat chase after the Mouse, we first wrote a dummy code for the Cat without using RTOS as scheduling was not needed at this point and it would complicate the debugging process. All we did here was to poll values of the four IR sensors and sent a SCI command to drive the Cat towards the Mouse whenever an IR sensor was activated (pulled low) while the Mouse remained still. 		
		<br><br>
		If the north pin was activated, we drove the Cat straight north (forward); if the south pin was activated, we drove the Cat straight south (backward in reverse); if the east pin was activated, we commanded the Cat to turn clockwise by approximately 90 degree; if the west pin was activated, we commanded the Cat to turn counter-clockwise by approximately 90 degree. Note that SCI commands did not allow one to command a Roomba to turn exactly certain degree, neither clockwise nor counter-clockwise. To approximate turning of 90 degree, we achieved through trial and error and determined that with speed parameter set at 100 and radius parameter set at 0 of a SCI drive command, it would take roughly 2 seconds for a Roomba to turn 90 degree, both clockwise and counter-clockwise.		
		<br><br>
		Now that the Cat could detect the Mouse and move closer towards the Mouse, we then enclosed the code for polling sensors in a loop so that Cat would continuously chase the Mouse by continuous sensing and driving with SCI commands. 
		<br><br>
		
		<br>The following video shows how the cat is chasing an inactive mouse.
		<br><object width="425" height="344"><param name="movie" value="http://www.youtube.com/v/o8yQVF0ecuo&hl=en&fs=1"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="http://www.youtube.com/v/o8yQVF0ecuo&hl=en&fs=1" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="344"></embed></object><br><br>
		</p>
			
		<h3>Roomba’s jerky movement</h3>
		<p>
		Though the Cat could continuous detect and chase the Mouse, we observed that the movement of the Cat was not smooth, and in fact the movement was quite jerky. After studying our code, we realized there were too many SCI commands sent to the Cat per second. This was because the polling of IR sensors executed very fast and an SCI drive command was sent to the Cat Roomba whenever an IR sensor pin was activated. Also, we knew that the IR sensors were refreshed only 20 times per second according to the specification. Therefore, we eliminated the jerky movement by slowing down the polling to an optimal frequency by trial and error.
		<br><br>
		Note that an alternative to polling would be using ISR() triggered by an activation of an IR sensor pin. However, we decided not to use ISR() because every interrupt would generate a SCI drive command. Since the IR sensors were refreshed 20 times per second, it would in turn generate 20 SCI drive commands per second, which were too many for the Roomba to handle based on what we learned from doing projects 1 and 2. In addition, we believed that polling gave us more control over the timing.		
		<br><br>
		</p>

		<h3>IR Beacon transmitters and sensors</h3>
		<p>
		There were two separate challenges with the IR beacon transmitters and sensors. The first was that the transmitters emitted signals that were too strong and at time signals would bounce off walls and created noise. It resulted in Cat’s sensors detecting Mouse in the wrong direction at times when the Mouse was placed too close to walls. As there were six transmitters we had to cover them all with black electrical wire tape to reduce the strength of signals as show in the picture below. 
		<br><br>
		<a href="images/IRBeacon-1.JPG"><img src="images/IRBeacon-1.JPG" alt="IR Beacon Transceiver 1" width="80%"/> </a>	
		<br><br>
		The second challenge was that the IR beacon sensors were very sensitive as it had a wide angle of receiving signals and there were in total four sensors on the IR Transceiver. This also resulted in Cat’s sensors detecting Mouse in the wrong direction at times. We decided to use the similar shield used in a previous project, Leader and Follower, to limit the receiving range of IR beacon sensors to exactly North, South, West, and East. By doing this, the ‘vision’ of Cat was limited but the detection was much more accurate, which resulted in Cat chasing the Mouse in a more precise direction.  
		<br><br>
		<a href="images/shield-1.jpg"><img src="images/shield-1.jpg" alt="Shield 1" width="80%"/> </a>
		<br><br>
		</p>
		
		<h3>Guiding Cat to bump the Mouse head-to-head</h3>
		<p>
		In our design, the game rules stated that Cat had to bump the Mouse head-to-head, head being the bumper, because game over could then be determined by ensuring both bumpers of Cat and Mouse were triggered and both North IR sensors were activated. Without it, neither Cat nor Mouse could tell whether they bumped into some obstacles at the same time or whether they indeed bumped into each other.  
		<br><br>
		<a href="images/mouse-caught.jpg"> <img src="images/mouse-caught.jpg" alt="Mouse caught" /> </a>
		<br><br>
		The question then was how we could guide the Cat to chase and bump the Mouse head-to-head. Our solution to this challenge was to build a shield that blocked off all transmitters of Mouse except the one closest to the North end, which was aligned with the bumper. The effect was that Mouse emitted IR beacon only from its north end, and thus Cat would only detect the north end of the Mouse and only moved towards Mouse’s bumper. 
		<br><br>
		We had tried a few alternative designs of the shield. First we covered five of the six transmitters with black electrical wire tape but this was not effective enough to block off the unwanted signals. Next we tried covering them with silicon using the glue gun and glued black tubes on top of them. It turned out that this was still not effective in blocking off the unwanted signals. 
		<br><br>
		<a href="images/IRBeacon-2.JPG"><img src="images/IRBeacon-2.JPG" alt="IR Beacon Transceiver 2" width="80%"/> </a>
		<br><br>
		Eventually we settled with a ‘sandwich’ shield. The shield consisted of one round pink styrofoam where the north end was cut open to allow signal to transmit and it had a center hole just big enough to hold the IR Transceiver. On top of the pink shield we laid down a black disk big enough to cover the whole IR Transceiver to prevent the signals from emitting upward and outward because the transmitters were sitting on the topside of the IR Transceiver. This shield turned out to be the optimal as it allowed the Cat to emit just enough IR signal through its north end. 		<br><br>
		<br><br>
		<a href="images/shield-3pieces.JPG"><img src="images/shield-3pieces.JPG" alt="Shield with 3 pieces" width="80%"/> </a>
		<br><br>
		<a href="images/shield-sandwitch.JPG"><img src="images/shield-sandwitch.JPG" alt="Sandwitch shield" width="80%"/> </a>
		<br><br>
		</p>
		
		<h3>Random search</h3>
		<p>
		The draw back of the shield we built was that when the Mouse was in front of the Cat with its back facing the Cat’s head, the Cat would not be able to detect the Mouse at all. Therefore, we introduced a random search motion whereby it would drive the Cat in random direction when it didn’t detect the Mouse in sight. Though the Cat was moving ‘blindly’ in search for the Mouse, in our experiment it would eventually wandered to a position where it could detect and chase the Mouse. The randomness was achieved by randomly generated a number between 0 and 3 periodically, with one number corresponded to one direction, and drove the Cat accordingly. 
		<br><br>
		</p>
		
		<h3>Stuck with a wall</h3>
		<p>
		At times, Cat bumped into wall and would get stuck at the same position. We figured that this only happened when it was in Chasing task; otherwise, the random movement in Searching task would rotate Cat/Mouse away from the wall eventually. Hence, we had it resolved by instructing Cat to drive backward first whenever its bumper was triggered.
		<br><br>
		</p>
		
		<h3>Multitasking and scheduling</h3>
		<p>
		In our design, there were five tasks to be scheduled for the Cat: Searching, Sensing, Chasing, Radio Tx, and Radio Rx tasks as outlined in the design section. We decided to incorporate RTOS at this point because the program would get more complex once the code for radio communication between Cat and Mouse was added, and because we had basically implemented the code for the Searching, Sensing, and Chasing tasks that needed to be scheduled concurrently. Further, we decided not to use any periodic task because no tasks needed to execute at a specific time interval and duration.
		<br><br>
		The RTOS we used was the one from our project 3, which supported bounded round robin tasks. Searching and Sensing were both assigned as BRR tasks as they were more of background tasks without urgency. These two tasks took turn to execute. Searching task moved randomly in search for Mouse without any sense of urgency. It would yield CPU when its assigned time was up. It was therefore best suited as a background Round Robin task that would execute whenever no other tasks of higher priority were executing. 
		<br><br>
		Now that the searching task had moved Cat’s position, Sensing task then executed to repeatedly poll IR beacon status to determine whether the Mouse was detected and if so in which of the four directions. It was similar to polling joystick positions as in Project 2. Sensor task had to execute frequently enough so that it did not miss the activation of a beacon sensor pin. Sensor task should not execute too frequently neither; otherwiese, it would consume most of the CPU cycles. 
		<br><br>
		We decided to execute Sensor task roughly for the same duration as the searching task, which resulted in a Cat that could effectively detect the Mouse and yet still left enough CPU time for the searching tasks to execute. Note the without the searching task to change the location of the Cat at times, it would be most certainly a total waste to execute sensing task to look for the Mouse when the Mouse was not in the range to be detected. As soon as the Mouse was detected, the Sensor task would fire the Mouse Detected event to unblock the Chasing task as described in a later paragraph. 
		<br><br>
		In addition, based on the experience from doing project 1 and 2, we knew that Roomba would not be able to handle roughly more than 5 commands per second. Otherwise, the Roomba’s movement would appear jerky. Also, the two BRR tasks, Sensor task and Search task, would execute alternatively for about the same duration of time. Therefore, we determined each one of Sensor and Searching tasks should execute for about 500 ms each time. In turn, each time there would be no more than 5 SCI drive commands issued by the Searching task and each command would consequently drive the Cat for 100 ms in our implementation. 
		<br><br>
		Chasing was assigned as a system task because it needed to waited on and acted on the event whenever the Mouse was detected (Mouse Detected event) and thus should preempt Searching and Sensing tasks. We coded the Sensing task so that it would fire up the Mouse Detected event to unblock the Chasing task, which would then chase after the Mouse by continuously polling IR beacon sensors to detect the Mouse and issuing SCI commands to drive itself towards the Mouse. Chasing task would execute as long as the Cat’s sensors continued to detect the Mouse and as long as the game was not over just yet. 
		<br><br>
		
		In the final implementation, we have decided to change the number of tasks. It happenned to be very challenging to incorporate 5 tasks all together: Sensing, searching, chasing, sending, and receiving. Instead, we thought that 
		a better approach would be to have a single BRR task that does sensing, chasing and searching. The idea is that the cat first check its sensor to know if it has detected the mouse.
		If the sensor is activated, it executes commands to chase in the direction detected.
		Otherwise, it simply executes a random search command. Having only 1 BRR task and 2 other system tasks allows the code to be less complex, and allows for better priority distinctions between tasks.
		
		</p>
		
		<h3>Radio communication between Cat and Mouse</h3>
		<p>
		Now that we had the core of the program established it was time to implement the communication between Cat and Mouse. The communication was required because according to the game rules, Cat had to bump Mouse head-to-head to win the game. As explained before, our condition for head-to-head bump was that both bumpers of Cat and Mouse were triggered at the same time, and the North pin of IR Beacon sensors of Mouse was activated. 
		<br><br>
		Therefore, to determine this, whenever Cat’s bumper was triggered, right away it would pause itself, queried the Mouse for confirmation of the head-to-head bump condition. If the condition was satisfied, game was over and Cat won. Otherwise, Cat resumed its status. Note that it was crucial to pause both the Cat and Mouse as soon as the Cat’s bumper was triggered so that the condition of head-to-head bump could be satisfied when it happened. Otherwise, we could never determine whether Cat has actually caught the Mouse.
		<br><br>
		When Mouse received the query from Cat, it would also pause itself, and check the status of its bumper and north pin of IR beacon sensor. If the condition was satisfied, it sent the game over confirmation to Cat, and stopped itself as Cat has won. Otherwise, it would notify the Cat that the condition was not satisfied, and resumed its own status.
		<br><br>
		The communication between Cat and Mouse was achieved by using the nRF24L01 Radio chip (as described in the Hardware section of this report) to send radio packets. The bumper status was obtained by having the controller query the Roomba in both the Searching and Chasing tasks. 
		<br><br>
		Additionally, Mouse would keep track of the game time. When the time was up and Cat had not caught the Mouse, game was over and the Mouse won. In this case, Mouse would send a radio packet to the Cat to indicate that game was over, and it would stop itself right after the radio packet was sent. 
		<br><br>
		There were two tasks, Radio Tx and Radio Rx in our implementation responsible for radio communication. Radio Tx task was responsible for transmitting radio packets and had to execute timely whenever there was a radio packet to be sent (a radio Tx event). Thus, we decided it should be a system task. Radio Rx task was responsible for receiving radio packets and had to execute timely whenever a radio packet arrived (a radio Rx event fired by the radio receiving ISR() as in our project 2). Similarly, we concluded it should be a system task as well.
		<br><br>
		</p>
		
		<h3>Head shaking</h3>
		<p>
		In testing the system implemented so far, at times we observed that Cat would exhibit a head shaking behavior. That was, Cat detected Mouse on its west and would rotate counter-clockwise, and then it detected Mouse on its right and would rotate clockwise, and then it detected Mouse on its west and would rotate counter-clockwise again, and so on. 
		<br><br>
		We had it resolved by not only commanding the Cat to rotate but also to drive forward right after rotation. In other words, 2 SCI commands, one for rotation and one for driving forward were sent to Cat Roomba instead of just the rotation command. 
		<br><br>
		</p>
		
		<h3>Rotating Cat 180 degree instead of moving backwards</h3>
		<p>
		Previously the Cat would move straight backwards if it detected Mouse on its south end. Though this would drove Cat closer to Mouse, it resulted in Cat bumping Mouse with its rear end at times when the Mouse was somewhere behind the Cat, which was not considered catching the Mouse according to the game rules. Consequently, we modified Cat’s movement so that it would rotate 180 degree instead and could more likely bump the Mouse with its head when the Mouse was located behind the Cat. 
		<br><br>
		</p>

		<h3>Autonomous Mouse </h3>
		<p>
		Initially in our design of the system as laid out in project 4, the Mouse was a dummy target that did not have any intelligence except to move around randomly and blindly and served only as a target for the Cat to catch. Now that we had implemented enough of the Cat’s behavior and gained more understanding of the IR Beacon transceiver and the interaction among all tasks and timing requirements of the system, we decided to give the Mouse more intelligence to build an autonomous Mouse instead. 
		<br><br>
		Our goal then was to add to the Mouse the intelligence of ‘escaping’ or ‘hiding’ from the Cat whenever the Cat was detected in sight by the Mouse. The gain was two folds because not only there would be more interaction between Cat and Mouse, but it would make the game more interesting to play and observe. 
		<br><br>
		It turned out that it was not that difficult to implement this idea of autonomous Cat because Mouse would behave almost the complete opposite of the Cat's. Thus, we simply modified the Chasing task and made it the Escaping task. Thus Mouse consisted of Sensing, Searching, Escaping, Radio Tx, and Radio Rx tasks. 
		<br><br>
		Like those of the Cat, Sensing and Searching tasks of the Mouse would execute alternatively for the same duration of time. The Escaping task was assigned as a system task because it needed to waited on and acted on the event whenever the Cat was detected (Cat Detected event) and thus should preempt Searching and Sensing tasks. The Sensing task of the Mouse would fire up the Cat Detected event to unblock the Escaping task. The Mouse would then run away from the Cat by continuously polling IR beacon sensors to detect the Cat’s location and issuing SCI commands to drive itself away from the Cat. 
		<br><br>
		Specifically, if the Cat was detected on the north end of the Mouse, the Mouse would rotate 180 degree; if detected on the south end, the Mouse would simply drive straight forward; if detected on the west end, the Mouse would rotate 90 degree clockwise and then drive straight forward; finally, if detected on the east end, the Mouse would rotate 90 degree counter-clockwise and then drive straight forward. Escaping task would execute as long as the Mouse’s sensors continued to detect the Cat and as long as the game was not over just yet.
		<br><br>
		<br>The following video shows the mouse escaping an inactive cat.
		<br><object width="425" height="344"><param name="movie" value="http://www.youtube.com/v/7fhcj44Mfqk&hl=en&fs=1"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="http://www.youtube.com/v/7fhcj44Mfqk&hl=en&fs=1" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="344"></embed></object><br><br>
		</p>

		<h3>A fair game</h3>
		<p>
		Since we now had an autonomous that would run away from the Cat, we had to make sure that game was fair to the Mouse as well. At this point during testing, we observed that with the shield we had built so far for the Mouse, it degraded the Mouse’s sensors to the point that it was almost blind that it was not able to effectively detect the location of the Cat except from the sensor sitting on the north end. In addition, its north sensor would fail to detect the Cat at times. 
		<br><br>
		We first tried removing the shield altogether from the Mouse. Without the shield, the Mouse obviously could detect the Cat more easily and ran away from the Cat much more frequently. Likewise, the Cat would detect and chase the Mouse more frequently. However, noise and interference of IR Beacon signals were observed more frequently as well because the transmitters’ signals were too strong and the sensors were too sensitive as explained earlier.
		<br><br>
		Therefore, we modified the shield by removing only the bottom piece of the shield (which was designed to narrow the receiving range of the four sensors). We also widened the opening at the north end of the pink piece of the shield so the Mouse could emit a wider range of signal from the north end. Lastly, we taped off only the three transmitters of the Cat located close to the south end of the IR Transceiver. 
		<br><br>
		<a href="images/shield-2.JPG"><img src="images/shield-2.JPG" alt="Shield 2" width="80%"/> </a>
		<br><br>
		</p>

		<h3>Slowing down the Mouse</h3>
		<p>
		During test run, we observed that when Cat was right in front of Mouse, the Mouse would run away from the Cat by rotating 180 degree and then drove straight away from Cat. At the same time, Cat continuously moved straight ahead towards the Mouse. Because both were moving at the same speed the result was that Cat could never catch up with the Mouse until Mouse bump into an obstacle. We therefore resolved it by speeding up the Cat when it was in Chasing task while slowing down the overall speed of the Mouse.
		<br><br>
		</p>

		<h3>The final look</h3>
		<p>
		In the end, these were what the Cat and Mouse looked like:
		<br><br>
		Cat
		<br>
		<a href="images/Cat.JPG"><img src="images/Cat.JPG" alt="Cat" width="80%"/> </a>
		<br><br>
		Mouse
		<br>
		<a href="images/Mouse.JPG"><img src="images/Mouse.JPG" alt="Mouse" width="80%"/> </a>
		<br><br>
		</p>

	</div>
	<div id="colTwo">
		<h3>Project Sections</h3>
		<ul>
			<li class="first"><a href="01_hardware_description.html">Hardware Description</a></li>
			<li><a href="02_software_design.html">Software Design</a></li>
			<li><a href="03_implementation_approach.html">Implementation Approach</a></li>
			<li><a href="04_development_process.html"><b>Development Process</b></a></li>
			<li><a href="05_doxygen.html">Doxygen</a></li>
			<li><a href="http://code.google.com/p/wireless-roomba">Google Code</a></li>
			<li><a href="07_future_work.html">Future Work</a></li>
		</ul>
	</div>
</div>
<div id="footer">
	<p>
		@ 2009. All Rights Reserved. Design by 
		<a href="http://www.freecsstemplates.org/">Free CSS Templates</a>.
	</p>
</div>
</body>
</html>
